/*
 * OREKIT-X
 * Copyright 2002-2008 CS Communication & Systemes
 * 
 * Parts of this software package have been licensed to CS
 * Communication & Systemes (CS) under one or more contributor license
 * agreements.  See the NOTICE file distributed with this work for
 * additional information.
 *  
 * This is an experimental copy of OREKIT from www.orekit.org.
 * Please use the original OREKIT from orekit.org for normal work
 * unrelated to this research project.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License.  You
 * may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied.  See the License for the specific language governing
 * permissions and limitations under the License.
 */
package ore.data;

/** 
 * Terms not depending on far planets and some other elements.
 * 
 * @author Luc Maisonobe
 */
class NoFarPlanetsTerm
    extends SeriesTerm
{

    /** 
     * Coefficient for mean anomaly of the Moon.
     */
    private final int cL;
    /** 
     * Coefficient for L - &Omega; where L is the mean longitude of
     * the Moon.
     */
    private final int cF;
    /** 
     * Coefficient for mean elongation of the Moon from the Sun.
     */
    private final int cD;
    /** 
     * Coefficient for mean longitude of the ascending node of the
     * Moon.
     */
    private final int cOmega;
    /** 
     * Coefficient for mean Mercury longitude.
     */
    private final int cMe;
    /** 
     * Coefficient for mean Venus longitude.
     */
    private final int cVe;
    /** 
     * Coefficient for mean Earth longitude.
     */
    private final int cE;
    /** 
     * Coefficient for mean Mars longitude.
     */
    private final int cMa;
    /** 
     * Coefficient for mean Jupiter longitude.
     */
    private final int cJu;
    /** 
     * Coefficient for mean Saturn longitude.
     */
    private final int cSa;


    /** 
     * @param sinCoeff Coefficient for the sine of the argument
     * @param cosCoeff Coefficient for the cosine of the argument
     * @param cL Coefficient for mean anomaly of the Moon
     * @param cF Coefficient for L - &Omega; where L is the mean longitude of the Moon
     * @param cD Coefficient for mean elongation of the Moon from the Sun
     * @param cOmega Coefficient for mean longitude of the ascending node of the Moon
     * @param cMe Coefficient for mean Mercury longitude
     * @param cVe Coefficient for mean Venus longitude
     * @param cE Coefficient for mean Earth longitude
     * @param cMa Coefficient for mean Mars longitude
     * @param cJu Coefficient for mean Jupiter longitude
     * @param cSa Coefficient for mean Saturn longitude
     */
    public NoFarPlanetsTerm(double sinCoeff, double cosCoeff,
                            int cL, int cF, int cD, int cOmega,
                            int cMe, int cVe, int cE, int cMa,
                            int cJu, int cSa)
    {
        super(sinCoeff, cosCoeff);
        this.cL     = cL;
        this.cF     = cF;
        this.cD     = cD;
        this.cOmega = cOmega;
        this.cMe    = cMe;
        this.cVe    = cVe;
        this.cE     = cE;
        this.cMa    = cMa;
        this.cJu    = cJu;
        this.cSa    = cSa;
    }


    /** {@inheritDoc}
     */
    protected double argument(BodiesElements elements) {
        return cL * elements.getL() + cF * elements.getF() +
               cD * elements.getD() + cOmega * elements.getOmega() +
               cMe * elements.getLMe() + cVe * elements.getLVe() + cE  * elements.getLE() +
               cMa * elements.getLMa() + cJu * elements.getLJu() + cSa * elements.getLSa();

    }

}
